/*
 * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package java.lang.annotation;
import java.lang.reflect.Method;

/**
 * 抛出以指示程序试图访问注解的某个元素，但该注解的类型在编译（或序列化）后已发生更改。
 * 此异常可以由{@linkplain java.lang.reflect.AnnotatedElement 用于反射读取注解的API}抛出。
 *
 * @author  Josh Bloch
 * @see     java.lang.reflect.AnnotatedElement
 * @since 1.5
 */
public class AnnotationTypeMismatchException extends RuntimeException {
    private static final long serialVersionUID = 8125925355765570191L;

    /**
     * 注解元素的<tt>Method</tt>对象。
     */
    private final Method element;

    /**
     * 在注解中发现的（错误的）数据类型。此字符串可以（但不是必须）包含值。
     * 字符串的确切格式未指定。
     */
    private final String foundType;

    /**
     * 为指定的注解类型元素和发现的数据类型构造AnnotationTypeMismatchException。
     *
     * @param element 注解元素的<tt>Method</tt>对象
     * @param foundType 在注解中发现的（错误的）数据类型。
     *        此字符串可以（但不是必须）包含值。字符串的确切格式未指定。
     */
    public AnnotationTypeMismatchException(Method element, String foundType) {
        super("Incorrectly typed data found for annotation element " + element
              + " (Found data of type " + foundType + ")");
        this.element = element;
        this.foundType = foundType;
    }

    /**
     * 返回类型错误元素的<tt>Method</tt>对象。
     *
     * @return 类型错误元素的<tt>Method</tt>对象
     */
    public Method element() {
        return this.element;
    }

    /**
     * 返回在类型错误元素中发现的数据类型。
     * 返回的字符串可以（但不是必须）包含值。字符串的确切格式未指定。
     *
     * @return 在类型错误元素中发现的数据类型
     */
    public String foundType() {
        return this.foundType;
    }
}
